/**
 * @typedef CreateResourceBody
 * @property {integer} parentId - 父级id
 * @property {string} name.required - 资源名称
 * @property {enum} type.required - 资源类型 menu 菜单 btn 按钮 - eg: menu, btn
 * @property {string} code.required - 资源唯一标识
 * @property {integer} sort - 排序依据
 */

/**
 * @typedef UpdateResourceBody
 * @property {integer} id.required - id
 * @property {integer} parentId - 父级id
 * @property {string} name.required - 资源名称
 * @property {enum} type.required - 资源类型 menu 菜单 btn 按钮 - eg: menu, btn
 * @property {string} code.required - 资源唯一标识
 * @property {integer} sort - 排序依据
 */

/**
 * @typedef UpdateStatusBody
 * @property {integer} id - 员工标识
 * @property {enum} status.required - 员工状态 0 禁用 1 启用 - eg: 0, 1
 */

const express = require('express')
const router = express.Router()
const auth = require('@/middleware/auth.middleware')
const resourceController = require('@/controllers/resource.controller')

/**
 * 新增权限资源
 * @route POST /resource
 * @summary 新增权限资源
 * @group 权限资源管理
 * @param {CreateResourceBody.model} CreateResourceBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access resource-config-permission:btn:add
 * @security JWT
 */
router.post('/', auth(), resourceController.create)

/**
 * 查询权限资源树
 * @route GET /resource
 * @summary 查询权限资源树
 * @group 权限资源管理
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access resource-config-permission:btn:find
 * @security JWT
 */
router.get('/', auth(), resourceController.find)

/**
 * 删除权限资源
 * @route DELETE /resource
 * @summary 删除权限资源
 * @group 权限资源管理
 * @param {number} id.query.required - 资源标识id
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access resource-config-permission:btn:delete
 * @security JWT
 */
router.delete('/', auth(), resourceController.delete)

/**
 * 更新权限资源
 * @route PUT /resource
 * @summary 更新权限资源
 * @group 权限资源管理
 * @param {UpdateResourceBody.model} UpdateResourceBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access resource-config-permission:btn:edit
 * @security JWT
 */
router.put('/', auth(), resourceController.update)

module.exports = router
